using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using NEXServicio;

namespace NEXEntidad
{
    #region EventoCultural
    public class EventoCultural : NEXEntidad.NEXEntidadElemento
    {
        #region Constructores
        public EventoCultural()
            : base()
        {
        }
        public EventoCultural(int id)
            : base(id)
        {
            this.Id = id;
        }
        #endregion

        #region Campos / Propiedades
        private string fTitulo;

        public string Titulo
        {
            get { return fTitulo; }
            set { fTitulo = value; }
        }
        private DateTime fFechaDesde;

        private string fDetalle;

        public string Detalle
        {
            get { return fDetalle; }
            set { fDetalle = value; }
        }

        public DateTime FechaDesde
        {
            get { return fFechaDesde; }
            set { fFechaDesde = value; }
        }

        private DateTime fFechaHasta;

        public DateTime FechaHasta
        {
            get { return fFechaHasta; }
            set { fFechaHasta = value; }
        }

        private Boolean activo;

        public Boolean Activo
        {
            get { return activo; }
            set { activo = value; }
        }


        #endregion

        #region Metodos de carga
        protected override void Obtener()
        {
            using (DataSet ds = ServicioEventoCultural.Obtener(this.Id))
            {
                DataTable dtEvento = ds.Tables[ServicioEventoCultural.DataTableName];
                if (dtEvento.Rows.Count > 0)
                {
                    DataRow drEvento = dtEvento.Rows[0];
                    EventoCultural.Cargar(this, drEvento);
                }
                else
                {
                    throw new ObjetoInexistenteException("EventoCultural");
                }
            }
        }

        private static void Cargar(EventoCultural evento, DataRow drEvento)
        {

            evento.Id = Convert.ToInt32(drEvento["IdEvento"].ToString(), System.Globalization.CultureInfo.CurrentCulture);
            evento.FechaDesde = Convert.ToDateTime(drEvento["FechaDesde"].ToString(), System.Globalization.CultureInfo.CurrentCulture);
            evento.FechaHasta = Convert.ToDateTime(drEvento["FechaHasta"].ToString(), System.Globalization.CultureInfo.CurrentCulture);
            evento.Descripcion = drEvento["Descripcion"].ToString();
            evento.Titulo = drEvento["Titulo"].ToString();
            evento.Detalle= drEvento["Detalle"].ToString();
            evento.Activo = Convert.ToBoolean(drEvento["Activo"]);
            evento.ObjetoCargado();
        }

        internal static EventoCulturalCollection CrearListaCargada(DataRowCollection drcEventos)
        {
            EventoCulturalCollection eventos = new EventoCulturalCollection();
            foreach (DataRow drEvento in drcEventos)
            {
                eventos.Add(EventoCultural.CrearCargado(drEvento));
            }
            return eventos;
        }

        private static EventoCultural CrearCargado(DataRow drEvento)
        {
            EventoCultural evento = new EventoCultural(Convert.ToInt32(drEvento["IdEvento"].ToString()));
            EventoCultural.Cargar(evento, drEvento);
            return evento;
        }
        #endregion

        #region Metodos publicos
        public static EventoCulturalCollection Listar()
        {
            return EventoCultural.CrearListaCargada(ServicioEventoCultural.Listar(true, DateTime.Now, DateTime.Now).Tables[ServicioEventoCultural.DataTableName].Rows);
        }
        public static EventoCulturalCollection Listar(Boolean activo, DateTime fechaDesde, DateTime fechaHasta)
        {
            return EventoCultural.CrearListaCargada(ServicioEventoCultural.Listar(activo, fechaDesde, fechaHasta).Tables[ServicioEventoCultural.DataTableName].Rows);
        }
        #endregion

        #region Metodos para Salvar
        protected override int SalvarObjeto(NEX_Datos.Transaccion transaccion)
        {
            try
            {
                Int32 idEvento = ServicioEventoCultural.Salvar(transaccion,this.Id,this.Titulo,this.FechaDesde,this.FechaHasta,
                                                                this.Descripcion,this.Detalle, this.Activo, this.EsInsert);
                return idEvento;
            }
            catch (Exception ex)
            {

                throw;
            }

        }
        #endregion

    }
    #endregion
    
    #region EventoCulturalCollection

    [Serializable]
    public class EventoCulturalCollection : NEXCollection<EventoCultural>
    {
    }

    #endregion

}
